Xcode 项目多环境配置
添加 Configuration
1⃣️前往 Project - info - Configurations
2⃣️点击 + Duplicate 相应的 Configuration

添加 Scheme
1⃣️前往 Manage Scheme
2⃣️点击设置 Duplicate 相应的 Scheme

3⃣️修改相应的 Build Configuration 为上一步创建的 Configuration

配置 Bundle Id 生成不同的包
1⃣️前往 TARGETS - Build Settings
2⃣️修改 Product Bundle Identifier 中 Configuration 相应的 Bundle Id

配置应用名称
1⃣️前往 TARGETS - Build Settings
2⃣️顶部菜单 Editor - Add Build Setting 添加 User-Defined Setting

3⃣️设置相应 Configuration 的应用名

4⃣️在 info.plist 中配置 Bundle display name 为上一步设置的参数

在代码中根据 Configuration 配置相关数据
1⃣️在 info.plist 中添加一个值: key:Configuration Value:$(CONFIGURATION)

2⃣️实现一个方法获取
class BuildConfiguration {
static let shared = BuildConfiguration()
var environment: Environment
var baseURL: String { // 1
switch environment {
case .debugStaging, .releaseStaging:
return "https://staging.example.com/api"
case .debugDevelopment, .releaseDevelopment:
return "https://dev.example.com/api"
case .debugProduction, .releaseProduction:
return "https://example.com/api"
}
}
init() {
let currentConfiguration = Bundle.main.object(forInfoDictionaryKey: "Configuration") as! String
environment = Environment(rawValue: currentConfiguration)!
}
}
BuildConfiguration.shared.baseURL
xcconfig 概念及其作用
一般修改 Build Setting 的办法是在 Xcode 的 Build Settings 界面上进行。手工修改容易出错,且不便于查找。 Xcode 提供了 Build configuration file(构建配置文件)来为 Project 或 Target 定义一组 Build Setting。也就是 xcconfig 的作用。使用 xcconfig 因为是纯文本所有非常容易查看修改了哪些配置不容易出错。
xcconfig 优先级
使用 xcconfig 时,Xcode 构建系统会按照下面的优先级来计算出 Build Setting 的最后生效值:
- Platform Defaults (平台默认值)
- Xcode Project xcconfig File(Project 级别的 xcconfig 文件)
- Xcode Project File Build Settings(Project 级别的手工配置的 Build Setting)
- Target xcconfig File (Target 级别的 xcconfig 文件)
- Target Build Settings(Target 级别的手工配置的 Build Setting)
Xcode 构建系统会按照上述列表从上而下读取 Build Setting,如果发现同样的 Setting ,就会把下面的 Setting 覆盖掉上面的,越往下优先级别越高。
格式和写法
/// 通过#include引入其他 xcconfig 文件
#include "path/to/OtherFile.xcconfig"
/// xcconfig 中配置的格式 key = value
BUILD_SETTING_NAME = value
/// 通过使用 $(inherited) 来保留原先的值
BUILD_SETTING_NAME = $(inherited) additional value
/// 引用其他已定义的 Build Setting
FRAMEWORK_SEARCH_PATHS = $(inherited) $(PROJECT_DIR)
xcconfig 分类
可以把 xcconfig 文件分成三大类:Shared、 Project 和 Targets。
- Shared: 文件夹用于保存分享到整个 App 的 Build Setting,例如 Swift 的版本号、App 所支持的 iOS 版本号等各种共享的基础信息。
- Project: 文件夹用于保存 Xcode Project 级别的 Build Setting,其中 BaseProject.xcconfig 会引入 Shared 文件夹下所有的 xcconfig 配置文件。
- Targets: 文件夹用于保存 Xcode Target 级别的 Build Setting,也是由一个 BaseTarget.xcconfig 文件来共享所有 Target 都需要使用的信息。它们都需要引入 CocoaPods 所生成的 xcconfig 和共享的 BaseTarget.xcconfig 文件,然后根据需要改写 App 的名字。
xcoconfig 配置
